package cl.tinet.trainee.tarea6.ejb;

import java.util.List;

import javax.ejb.Remote;

import cl.tinet.trainee.tarea6.exception.UsuarioDaoException;
import cl.tinet.trainee.tarea6.model.Usuario;

/**
 * Definicion de firmas de comunicacion entre la capa web y datos.
 * 
 * @author tinet
 * 
 */
@Remote
public interface UsuarioBean {
	/**
	 * Envia un nuevo usuario a la capa de datos para su almacenamiento.
	 * 
	 * @param usuario
	 *            Nuevo usuario.
	 * @return Retorna true si tuvo exito en la operacion o false en caso
	 *         contrario.
	 * @throws UsuarioDaoException
	 *             En caso que ya exista el usuario en la bd se activa la
	 *             excepcion.
	 */
	public boolean agregar(Usuario usuario) throws UsuarioDaoException;

	/**
	 * Envia el usuario a eliminar a la capa de datos para su procesamiento.
	 * 
	 * @param usuario
	 *            Usuario a eliminar.
	 * @return Retorna true en caso que la operacion sea exitosa o false si
	 *         ocurre un error.
	 */
	public boolean eliminar(Usuario usuario);

	/**
	 * Envia el usuario actualizado a la capa de datos para su modificacion.
	 * 
	 * @param usuario
	 *            Usuario actualizado
	 * @return Retorna true en caso de exito y false en caso contrario.
	 */
	public boolean actualizar(Usuario usuario);

	/**
	 * Accede a la capa de datos para obtener la lista de usuarios existentes de
	 * acuerdo al filtro ingresado. "" o "*" para todos los elementos o el
	 * nombre por el que se desea filtrar, tambien puede ser parte del nombre.
	 * 
	 * @param nombre
	 *            Filtro de busqueda
	 * @return Retorna la lista encontrada o null en caso que la tabla este
	 *         vacia.
	 */
	public List<Usuario> listarUsuario(String nombre);

	/**
	 * Busca un usuario por su username en la tabla.
	 * 
	 * @param usuario
	 *            Usuario buscado.
	 * @return Retorna el usuario o null en caso que no exista.
	 * @throws UsuarioDaoException 
	 */
	public Usuario buscar(Usuario usuario);

}
